データ分析基盤「カスタマーストーリー アナリティクス」がSnowflakeに対応しました! ~CSA JMCでSnowflake連携を行うための設定手順~
こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。
弊社プロダクトのカスタマーストーリー アナリティクス(Customer Story Analytics:CSA)が、Snowflakeに対応しました。対応サービスはCSA Job Management Console(CSA JMC)です。
対応機能としては、まずは「SQLクエリをSnowflakeに対して実行できる」という第一歩からとはなりますが、今後は更に機能追加を行っていく予定です。当エントリでは「CSA JMC」でSnowflake連携を行うにあたり「Snowflake環境の準備」および「CSA JMCで必要なサイト設定」についてご紹介します。
「CSA」の概要についてはこちらの記事をご参照ください。
また、「CSA JMC」バージョン5.0の概要については、こちらの記事で紹介しています。
CSA JMCの挙動確認バージョン
当エントリの内容は以下のCSA JMCバージョンで挙動を確認しています。
- CSA JMC v5.0.0
Snowflake環境の準備
まずはCSA JMCから接続するSnowflake環境の準備を行っていきます。なお、ここではSnowflakeアカウントは開設済みであることを前提としています。
また、Snowflake上での権限やユーザー、データの管理については、色々な考え方やポリシーがあると思いますが、ここでは以下の考え方をベースとしてCSA JMCに接続するための準備を行います。
- CSA用に新規に専用の「ロール」を作成する
- CSA用に新規に専用の「仮想ウェアハウス」を作成し、該当ロールで利用可能とする
- CSA用に新規に専用の「データベース」を作成し、該当ロールで利用可能とする
- CSA用に新規に専用の「ユーザー」を作成し、該当ロールに所属させる
「ロール」の作成
はじめに権限管理のベースとなる「ロール」から作成していきます。「ロール」はカスタムロールを作成し、ベストプラクティスに従ってSYSADMIN
を上位ロールに設定します。
-- カスタムロールを作成 USE ROLE USERADMIN; CREATE ROLE "CSA" COMMENT = 'Role for CSA'; GRANT ROLE "CSA" TO ROLE "SYSADMIN";
「仮想ウェアハウス」の作成と「ロール」の割り当て
次に「仮想ウェアハウス」の作成と「ロール」の割り当てを行います。仮想ウェアハウスCSA_WH
はXSMALL
サイズとし、1分(60秒)で自動サスペンドするようにします。また、カスタムロールCSA
に対して、作成した仮想ウェアハウスCSA_WH
のUSAGE
とOPERATE
権限を付与します。
-- 仮想ウェアハウスを作成 USE ROLE SYSADMIN; CREATE WAREHOUSE CSA_WH WITH WAREHOUSE_SIZE = 'XSMALL' WAREHOUSE_TYPE = 'STANDARD' AUTO_SUSPEND = 60 AUTO_RESUME = TRUE; -- 権限をカスタムロールへ付与 USE ROLE SECURITYADMIN; GRANT USAGE ON WAREHOUSE CSA_WH TO CSA; GRANT OPERATE ON WAREHOUSE CSA_WH TO CSA;
「データベース」の作成と「ロール」の割り当て
続いて「データベース」の作成と「ロール」の割り当てを行います。また、カスタムロールCSA
に対して、作成したデータベースCSA
と、そのスキーマCSA.PUBLIC
のOWNERSHIP
権限を付与します。
-- データベースを作成 USE ROLE SYSADMIN; CREATE DATABASE CSA; -- 権限をカスタムロールへ付与 USE ROLE SECURITYADMIN; GRANT OWNERSHIP ON DATABASE CSA TO CSA; GRANT OWNERSHIP ON SCHEMA CSA.PUBLIC TO CSA;
「ユーザー」の作成と「ロール」の割り当て
最後に「ユーザー」の作成と「ロール」の割り当てを行います。
ユーザーには明示的にDEFAULT_ROLE
、DEFAULT_WAREHOUSE
に先程作成したものを、DEFAULT_NAMESPACE
にPUBLIC
スキーマを割り当てています。また「CSA JMC」でのみ利用するユーザなので、MUST_CHANGE_PASSWORD
はFALSE
として初回パスワード変更を不要としています。
作成したユーザは、カスタムロールCSA
に所属させて準備完了です。
-- ユーザーを作成 USE ROLE USERADMIN; CREATE USER "CSA_ADMIN" PASSWORD = '************************' LOGIN_NAME = 'CSA_ADMIN' DISPLAY_NAME = 'CSA_ADMIN' FIRST_NAME = 'CSA' LAST_NAME = 'ADMIN' EMAIL = 'sample@foobar.com' DEFAULT_ROLE = "CSA" DEFAULT_WAREHOUSE = 'CSA_WH' DEFAULT_NAMESPACE = 'PUBLIC' MUST_CHANGE_PASSWORD = FALSE ; GRANT ROLE "CSA" TO USER "CSA_ADMIN";
CSA JMCで必要なサイト設定
Snowflake側の設定が完了したので、今度は「CSA JMC」のサイト設定を行います。メニューの「サイト管理 > サイト設定」から設定画面へ移ります。
接続設定
まずは「Snowflake接続」タブの接続設定からです。
Snowflakeへの接続情報として必要な情報は以下のとおりです。
- ユーザ名
- パスワード
- アカウント
- ロール
- ウェアハウス
- データベース
- スキーマ
それぞれ、先程Snowflakeで作成したものを指定していきます。「アカウント」については、SnowflakeログインURLのsnowflakecomputing.com
より前の値がアカウントになります。例えば https://xy12345.ap-northeast-1.aws.snowflakecomputing.com/
の場合には、xy12345.ap-northeast-1.aws
となります。
入力が完了したら「接続テスト」をクリックして、接続に問題がないことを確認し「保存」します。
構成要素設定
つぎに「構成要素設定」タブです。
こちらでは「データ連携用S3バケット」、「SQL用S3バケット」、「プログラム用S3バケット」を設定します。それぞれ以下のような用途となります。
- データ連携用S3バケット
- Snowflake にロードするファイルを配置するバケット
- SQL用S3バケット
- CSA の構成要素として登録する SQL を保管するバケット
- プログラム用S3バケット
- CSA の構成要素として登録する Python プログラムを保管するバケット
まずはS3バケットを用意する必要がありますので、AWS管理コンソールにログインして、それぞれ作成していきます。
S3バケットの作成
今回はそれぞれ以下の名前のバケットを作成します。
- データ連携用S3バケット
- devio-snowflake-v5-copy-bucket
- SQL用S3バケット
- devio-snowflake-v5-sql-bucket
- プログラム用S3バケット
- devio-snowflake-v5-program-bucket
バケットのパブリックアクセス設定については「全てブロック」した形で問題ありません。また、バケットポリシーについても、追加設定は必要ありません。
「データ連携用S3バケット」にはデータ連携で用いるためのフォルダが必要となります。以下の6つのフォルダを作成してください。
- init
- manual
- hourly
- daily
- weekly
- monthly
これでS3バケットの作成ができました。次に、このバケットに対するアクセス権限の設定をIAMロールのインラインポリシーに対して行う必要があります。
IAMロールのインラインポリシー設定
対象となるIAMロールは2つあり、「ECSタスク IAMロール」と「Lambda IAMロール」の2つです。こちらは、先程確認した「CSA JMC」の「構成要素設定」タブに表示されていたものです。
AWS管理コンソールから該当のIAMロールを開いて、「〜app-s3-policy」という名前が付いているインラインポリシーに対して以下のように追加設定を行います。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::xxxxxxxxxxxxxxx-csa-data-bucket", "arn:aws:s3:::xxxxxxxxxxxxxxx-csa-system-bucket", "arn:aws:s3:::devio-snowflake-v5-copy-bucket", "arn:aws:s3:::devio-snowflake-v5-sql-bucket", "arn:aws:s3:::devio-snowflake-v5-program-bucket" ], "Effect": "Allow" }, { "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::xxxxxxxxxxxxxxx-csa-data-bucket/*", "arn:aws:s3:::xxxxxxxxxxxxxxx-csa-system-bucket/*", "arn:aws:s3:::devio-snowflake-v5-copy-bucket/*", "arn:aws:s3:::devio-snowflake-v5-sql-bucket/*", "arn:aws:s3:::devio-snowflake-v5-program-bucket/*" ], "Effect": "Allow" } ] }
「ECSタスク IAMロール」と「Lambda IAMロール」の両方に対して設定を行ったら完了です。
構成要素設定にバケットを設定する
最後に改めて「CSA JMC」の画面に戻り、バケットを設定します。先程作成した以下のバケットをそれぞれ入力して「保存」します。
- データ連携用S3バケット
- devio-snowflake-v5-copy-bucket
- SQL用S3バケット
- devio-snowflake-v5-sql-bucket
- プログラム用S3バケット
- devio-snowflake-v5-program-bucket
これで、CSA JMCでSnowflake連携を行うための設定が完了しました。
まとめ
以上、CSA JMCでSnowflake連携を行うための設定についてご紹介しました。次回以降は、具体的な利用方法を含めご紹介していきたいと思います。
お知らせ
2020/09/29(火)にCSアナリティクスが対応している各データウェアハウス(Redshift、BigQuery、Snowflake)と、CSアナリティクスについての解説を行うウェビナーを開催予定です。ご興味がありましたら是非お申し込みください。